Predicting defects in code

ABSTRACT

A system is described herein that predicts defects in a portion of code of an application that is configured to execute on a computing device. Versions of code are analyzed to locate change bursts, which are alterations to at least one portion of code over time-related events. If a change burst is identified, defects are predicted with respect to the code based at least in part upon the identified change burst.

BACKGROUND

Over the last several years, personal computing devices have transformed from relatively high-cost, low-function machines to relatively inexpensive machines that can perform a plurality of tasks including but not limited to financial management tasks, Internet browsing, word processing, complex calculations, etc. This evolution of personal computers has been based at least in part upon advances in hardware, including but not limited to an increase in a number of transistors included in processors, an increase in memory space, an increase in hard drive space, amongst other hardware advances.

To efficiently use this hardware on personal computers, complex operating systems have been developed. For instance, an operating system may include several millions of lines of code. Furthermore, robust applications that can perform a plurality of tasks, ranging from relatively simple to relatively complex, have been developed to execute on one or more different types of operating systems. Similar to an operating system, an application may include a large number of lines of code.

Oftentimes, especially in connection with large or complex operating systems or applications, source code pertaining to an application will compile without any errors being detected. In some cases, however, the resulting compiled applications will not execute according to specifications or as expected by a developer or user.

Typically, an application or operating system is tested prior to such application or operating system being released to the public. Due to size and incredible amount of functionality that is associated with conventional applications and operating systems, it can be nearly impossible for testers to exhaustively test an operating system or application prior to release. After an application is released to the public, one or more users may report errors in how the application operates in certain situations or with certain types of hardware. The developer or developers of the application then generate a patch that corrects such problem and then transmits such patch to end users, for instance, via the Internet. Generating patches for released software tends to be relatively expensive for the developer of the software. For example, a single patch may cost a developer hundreds of thousands of dollars to generate and transmit to end users.

SUMMARY

The following is a brief summary of subject matter that is described in greater detail herein. This summary is not intended to be limiting as to the scope of the claims.

Described herein are various technologies pertaining to generating predictions with respect to defects in software, wherein the software can be or include an operating system, an application, a patch, or other suitable software. In connection with generating such predictions, one or more change bursts can be detected in a portion of code of the software (e.g., source code, binary code, . . . ). For instance, the portion of the code may be a class, file, a package, a module, or some other suitable measure of element in code. Generally, a change burst can be a particular number of alterations to the portion of the code over a threshold number of time-related events. For instance, a change burst may be a relatively large number of alterations to the portion of the code over a relatively small amount of time (e.g., a four day period). Moreover, a time-related event may be an hour, a day, a week, or some other standard time unit. In another example, a time-related event may be a day in which a build is undertaken with respect to the software, a day in which a portion of code is checked in, etc. In such a case, weekends can be accounted for (e.g., builds or check-ins often do not occur over weekends and/or holidays.).

A change burst with respect to code of an application can be identified by accessing and analyzing version information pertaining to the code. In an example, the version information may be included in a version store (a data repository that retains different versions of the code over time). Each version of the code can be analyzed to ascertain whether the portion of the code of interest has been altered with respect to a previous version. If the portion of the code has been altered, a time event corresponding to such version can be obtained. This time event may then be compared with time events corresponding to other versions where the portion of the code of interest has been subject to alteration. If two alterations occur with respect to one another within a threshold number of time-related events (e.g., if a first alteration occurs within a number of time-related events that are less than or equal to a threshold), such alterations can be “grouped” together. If a threshold number of alterations are grouped together (e.g., if a number of alterations in a group are greater than or equal to a threshold), then such alterations can be defined as a change burst.

In another example, rather than accessing a version store, version information can be analyzed during development of the code. For example, an incremental analysis can be undertaken with respect to alterations to code during development of such code. Whenever a change has occurred to a portion of the code of interest, an event can be generated, wherein the event has metadata corresponding thereto to indicate that the portion of code has been altered at a certain time-related event. Again, if two alterations occur with respect to one another within a threshold number of time-related events, such alterations can be “grouped” together. If a threshold number of alterations are grouped together, then such alterations can be defined as a change burst.

Once one or more change bursts have been identified with respect to a certain portion of code, one or more metrics pertaining to the change bursts can be generated. Such metrics can include a number of time-related events in which the portion of the code has changed, a number of changes in a particular change burst, a number of change bursts corresponding to the portion of code, a size of a change burst; temporal metrics including a time that a change burst occurs, a time that a change burst of maximal size occurs; metrics pertaining to individuals including a number of people that correspond to changes in a change burst; trend metrics, including a total number of lines that have altered in the portion of code for a particular change burst, amongst other metrics. Such metrics may be utilized in connection with predicting that a defect may exist in the portion of code, that maintenance is likely to be needed with respect to the portion of the code, or to output recommendations such as recommending a number of individuals to employ in connection with maintaining code.

Other aspects will be appreciated upon reading and understanding the attached figures and description.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a functional block diagram of an example system that facilitates predicting defects in a portion of code.

FIG. 2 is a functional block diagram of an example system that facilitates identifying change bursts pertaining to a portion of code.

FIG. 3 is a graphical representation of alterations over time events.

FIG. 4 is a graphical depiction of change bursts given different gap size and burst size requirements.

FIG. 5 is flow diagram that illustrates an example methodology for identifying change bursts with respect to a portion of code.

FIG. 6 is a flow diagram that illustrates an example methodology that facilitates predicting defects in a portion of code.

FIG. 7 is an example computing environment.

DETAILED DESCRIPTION

Various technologies pertaining to predicting defects in a portion of code of an application/operating system will now be described with reference to the drawings, where like reference numerals represent like elements throughout. In addition, several functional block diagrams of example systems are illustrated and described herein for purposes of explanation; however, it is to be understood that functionality that is described as being carried out by certain system components may be performed by multiple components. Similarly, for instance, a component may be configured to perform functionality that is described as being carried out by multiple components.

With reference to FIG. 1, an example system 100 that facilitates predicting defects in a portion of code is illustrated. For instance, the system 100 may be included in an integrated development environment application or a build environment. Furthermore, the system 100 may be included in a personal computer, a server, a portable computing device, etc.

The system 100 optionally includes a version store 102 that can be configured to retain a plurality of different versions 104 of code. In an example, the code may be source code for an operating system or an application configured to execute on a personal computer, a binary pertaining to an operating system or application, or other suitable application/code. Version stores are known in the realm of software development, and configuration of the version store 102 may be any suitable configuration.

A receiver component 106 can have access to the version store 102. The receiver component 106 can receive data pertaining to the plurality of versions 104 in the version store 102, wherein such plurality of versions 104 include data pertaining to a particular portion of the code of interest. Such portion may be a portion of source code, a binary, a module, a class, a package, or other suitable portion of the code. Specifically, the portion may be an executable, a dynamic link library, a configuration file, or the like. Moreover, each of the versions 104 in the version store 102 may correspond to a different time-related event. For example, a time-related event may be a day, a week, an hour, etc. In another example, a time-related event may be a time unit pertaining to when a build of the software was undertaken or at least the portion of code was checked in (e.g., a day that a build of the code was undertaken or a day that at least the portion of the code was checked in).

The system 100 may further include a determiner component 108 that is in communication with the receiver component 106. The determiner component 108 can make a determination that a change burst exists with respect to the portion of the code of interest. A change burst as used herein is a threshold number of alterations made to the portion of the code of interest, wherein each alteration in the threshold number of alterations is within a threshold number of time-related events from another alteration in the threshold number of alterations (e.g., a number alterations is greater than or equal to a threshold number of alterations, and a number of time-related events between two alterations is less than or equal to a threshold). Thus, a change burst may be a frequent number of alterations of the portion of the code over a relatively short period of time. In an example, a change burst may be three alterations to the portion of code over a seven day period where builds were undertaken with respect to the code. Furthermore, as will be described in greater detail below, the determiner component 108 can ascertain various metrics pertaining to the identified change burst or change bursts, as well as other metrics pertaining to the portion of the code.

As indicated above, the time-related event may be a day in which a build occurs. In an example, it can be assumed that each build is created out of individual portions (classes, packages, modules, or other constituents). A portion C of code S can have a history across builds that can be represented by a series C=(c₁, c₂, . . . , C_(|S|)). If c_(i)≠c_(i+1), then the portion C has changed in build s_(i). For each portion of the code, the determiner component 108 can identify change bursts as sequences of changes, wherein the determiner component 108 can identify change bursts through utilization of two parameters: gap size G and burst size β. The gap size is a maximum distance between two alterations, wherein distance refers to a number of time-related events between alterations. Two alterations with a distance therebetween that is less than or equal to G can be part of a same burst. The burst size β determines a minimum number of alterations in a burst. If the number of changes in a burst b is greater than or equal to β, then the determiner component 108 will identify the burst b as a change burst.

More formally, a change burst that is identified by the determiner component 108 can be a sequence B=(c_(i) ₁ , c_(i) ₂ , . . . ) with i₁, i₂, . . . , i_(|B|) ε {1, . . . , |C|} such that c_(i) _(k) ≠c_(i) _(k+1) , |B|≧β, and for all 1≦k<|B|, i_(k)≦i_(k+1)≦G. The sequence bursts (C)=(B₁, B₂, . . . ) of all change bursts for C may comprise the longest non-overlapping change bursts; e.g., Σ_(i=1) ^(|bursts(C)|)|B_(i)| is maximal, and b_(i)∩b_(j)=0 holds for all b_(i), b_(j) ε bursts(C) with b_(i)≠b_(j). The determiner component 108 can utilize such rules when identifying change bursts in a portion of code.

A predictor component 110 can be in communication with the determiner component 108. The predictor component 110 can be configured to generate a prediction that the portion of the code of interest has at least one defect based at least in part upon the determination made by the determiner component 108 that the change burst exists with respect to the portion of the code. For instance, a relatively large number of alterations to the portion of the code over a relatively small amount of time may be indicative of problems that developers had when attempting to cause an application/operating system to act as expected. Additionally or alternatively, the predictor component 110 can be configured to generate a prediction that maintenance may be required with respect to the portion of the code based at least in part upon the determination made by the determiner component 108 that at least one change burst exists with respect to the portion of the code of interest. In still yet another example, the predictor component 110 can be configured to output a recommendation based at least in part upon the determination made by the determiner component 108 that a change burst exists with respect to the portion of the code. Such recommendation may be, for instance, a recommendation to have a certain number of people in a particular group prepared to maintain the portion of the code. In another example, such recommendation may be a recommendation of how to price the code for sale based at least in part on expected maintenance costs.

The predictor component 110 may include any suitable prediction/recommendation algorithm or model. For instance, the predictor component 110 may be or include a regression model, a Bayesian belief network, an artificial neural network, a support vector machine, a classifier, may use collaborative filtering techniques, etc., in connection with outputting predictions/recommendations. Furthermore, the predictor component 110 may be trained and tested using any suitable training data as is known in the art.

The system 100 may further include a display component 112 that causes a prediction and/or recommendation output by the predictor component 110 to be displayed on a display screen 114 of a computing device. Thus, a project manager or developer can ascertain that the portion of the code is predicted to have a defect corresponding thereto, is predicted to have maintenance issues corresponding thereto, may review a recommendation pertaining to the portion of the code, etc., by viewing the display screen 114 of the computing device.

Moreover, the system 100 may be configured to output predictions/recommendations at different times during the course of development of the operating system/application. Furthermore, the determiner component 108 can be configured to review versions of the code over a particular range of time-related events. For example, a change burst that occurs more recently may be more highly indicative of a possible defect in the portion of the code when compared to a change burst that occurred earlier in a software development process. In another example, the determiner component 108 can be configured to determine whether a portion of code has a change burst corresponding thereto periodically, from time to time, as a background task in an integrated development environment application, etc.

While the system 100 has been described to detect change bursts in code through analysis of data in the version store 102, it is to be understood that change bursts can be detected through other methods/techniques. For instance, rather than accessing a version store, version information can be analyzed during development of the code. Thereafter, an incremental analysis can be undertaken with respect to alterations to code during development of such code. Whenever a change has occurred to a portion of the code of interest, an event can be generated, wherein the event has metadata corresponding thereto to indicate that the portion of code has been altered at a certain time-related event. Again, if two alterations occur with respect to one another within a threshold number of time-related events, such alterations can be “grouped” together. If a threshold number of alterations are grouped together, then such alterations can be defined as a change burst. Of course, other techniques for identifying alterations in code over time are contemplated and intended to fall under the scope of the hereto-appended claims.

Referring now to FIG. 2, an example system 200 that facilitates predicting that a portion of code has a defect is illustrated. The system 200 includes a setter component 202 that is configured to set a gap size and burst size (described above) to be utilized by the determiner component 108 when ascertaining whether or not a change burst exists with respect to a portion of code. For example, a developer can indicate the desired gap size and burst size, wherein such gap size and burst size may depend upon the application/operating system. For instance, for predicting defects in code of an operating system a first gap size and a first burst size may be desirable, while for predicting defects in code of a web browser a second gap size and a second burst size may be desirable. The gap size and burst size can be set automatically based upon complexity/identity of software or may be set manually or may be adjusted continuously as development progresses.

The determiner component 108 can receive the gap size and the burst size set by the setter component 202, and may determine whether one or more change bursts exists in the portion of the code using such gap size and the burst size. Pursuant to an example, the determiner component 108 may include a burst monitor component 204 that is configured to monitor a number of alterations that occur within the gap size set by the setter component 202. Thus, initially the burst monitor component 204 can set a current burst value to zero.

An accessor component 206 can access various versions of the code and ascertain whether alterations were made to the portion of the code of interest. Furthermore, the accessor component 206 can determine values of time-related events corresponding to alterations to the portion of the code of interest.

A comparator component 208 can compare values of the time-related events corresponding to the alterations in the portion of the code of interest, and can determine whether such alterations occurred within the gap size defined by the setter component 202. Thus the comparator component 208 can review two alterations to the portion of the code, and can ascertain whether a number of time-related events between such two alterations are less than or equal to the gap size set by the setter component 202. If the comparator component 208 determines that the number of time-related events between the two alterations is less than or equal to the threshold, an incrementor component 210 can increment the current burst value maintained by the burst monitor component 204. If the comparator component 208 is comparing alterations to the portion of the code that are initial alterations (e.g., the comparison includes an alteration that is a first alteration in a burst), the incrementor component 210 can set the current burst value to two, and thereafter increment such monitor value by one if alterations to the portion of the code continue to have a number of time-related events therebetween that is less than or equal to the gap size set by the setter component 202.

An identifier component 212 can analyze the current burst value to ascertain whether a change burst exists that satisfies the gap size and burst size set by the setter component 202. If the identifier component 212 ascertains that a change burst has occurred, the identifier component 212 can cause an indication of the change burst to be stored in a data repository.

The determiner component 108 may further include a metric determiner component 214 that can ascertain metrics corresponding to the portion of the code of interest. For example, the metric determiner component 214 can ascertain metrics corresponding to change bursts pertaining to the portion of the code. Such metrics may be used by the predictor component 110 in connection with outputting a prediction and/or recommendation.

Example metrics can include, but are not limited to, change metrics, temporal metrics, people metrics, and churn metrics. Change metrics can include a number of changes made to the portion of the code of interest (e.g., a number of builds in which the portion of the code is changed). Change metrics may also include a number of alterations to the portion of the code of interest that are “consecutive” in nature (each alteration occurs within the gap size of a subsequent alteration). Change metrics may also include a number of change bursts that exist with respect to the portion of the code, a number of alterations in a particular change burst, a number of alterations in a maximally sized change burst, etc.

Temporal metrics may be or include a value that indicates when in time a first change burst occurred (which can be normalized to a total number of builds), a value indicating a time when a most recent change burst occurred, a value indicating a time that a largest change burst occurred with respect to the portion of the code, amongst other temporal metrics. People metrics may include, but are not limited to, a total number of people who committed a change to the portion of the code of interest, a total number of people who are involved with respect to a particular change burst, and/or a maximum number of people involved with respect to a change burst corresponding to the portion of the code of interest. Finally, trend metrics may be or include a total number of lines of the portion of code that were altered over the lifetime of the portion of code, a total number of lines changed across all change bursts corresponding to the portion of the code, and/or a maximum number of lines changed over all change bursts corresponding to the portion of code of interest.

The predictor component 110 may use any suitable combination of such metrics, as well as other metrics, when generating predictions of defects and maintenance and/or outputting a recommendation pertaining to the portion of code of interest. Other metrics that may be used by the predictor component 110 can be or include an organizational structure of a company, churn data pertaining to other portions of the code, etc.

Referring now to FIG. 3, an example graphical depiction 300 of alterations made to a portion of code over time is illustrated. In the example depicted in FIG. 3, the gap size may be 2 and the burst size may be 3. In the time frame shown in FIG. 3, nineteen time-related events have occurred. As noted above, such events may be days, days in which a build has occurred, days in which code has been checked in, etc. The first time-related event is shown at to, while the nineteenth time-related event is shown as t₁₈.

A first alteration 302 to a portion of the code of interest is shown to have occurred at time-related event t₀. A second alteration 304 is shown to have occurred at time-related event t₂. A third alteration 306 is shown to have occurred at time-related event t₃, and a fourth alteration 308 is shown to have occurred at time-related event t₄. The alterations 302-308 can collectively be identified as a change burst, as a gap between any of the alterations 302-308 is less than or equal to the gap size of two, while the number of alterations 302-308 is greater than or equal to the burst size of three.

A fifth alteration to the portion of the code of interest 310 and a sixth alteration 312 to such portion of the code of interest occur at time-related events t₈ and t₉, respectively. As can be ascertained, the alteration 310 and the is not identified as being in a change burst, as the gap to alteration 308 is greater than the gap size of 2. Similarly, the alterations 310 and 312 are not identified as being in a change burst, as the number of alterations is less than the threshold burst size of three.

Alterations 314-320 occur at time-related events t₁₃, t₁₄, t₁₆, and t₁₇, respectively. These alterations 314-320 can be grouped together in a change burst, since gaps between any of the alterations that are adjacent to one another with respect to time-related events have a gap size of less than or equal to the threshold gap size of two, and the number of alterations 314-320 is greater than or equal to the threshold burst size of 3.

Now referring to FIG. 4, an example graphical depiction 400 of change bursts given different gap sizes and burst sizes is illustrated. The graphical depiction 400 shows that fifteen time-related events are subject to analysis, wherein eight alterations, 402-416, have occurred in such fifteen time-related events. Specifically, a first alteration 402 occurs at time-related event to, a second alteration 404 occurs at time-related event t₁, a third alteration 406 occurs at time-related event t₃, a fourth alteration 408 occurs at time-related event t₆, a fifth alteration 410 occurs at time-related event t₇, a sixth alteration 412 occurs at time-related event t₉, a seventh alteration 414 occurs at time-related event t₁₀, and an eighth alteration 416 occurs at time-related event t₁₁.

In the first example shown in FIG. 4, the gap size is set to one and the burst size is set to one, thereby creating multiple change bursts 418-424. Since the burst size is set to one, every change is included in a change burst, and changes that occur with respect to adjacent time-related events are grouped into a change burst. In the second example shown in FIG. 4, the gap size is set to one and the burst size is set to two, thereby creating multiple change bursts 426-430. In this example, alterations to the source code must occur in immediately adjacent time-related events to be considered change bursts. In the third example shown in FIG. 4, the gap size is set to two and the burst size is set to one, thereby creating change bursts 432 and 434. As can be ascertained, when the gap size is increased, smaller change bursts are merged (e.g., larger change bursts are created, as alterations to source code that occurred with respect to non-adjacent time-related events can be included in a single change burst).

In the fourth example shown in FIG. 4, the gap size is set to two and the burst size is set to four, thereby creating a change burst 436. In this example, the alterations 402, 404, and 406 are not included in a change burst, as the gap size between alterations 406 and 408 is not less than or equal to two (e.g., alteration 408 is three time-related events away from the alteration 406), and the number of alterations is not greater than or equal to the burst size (four). In the fifth example shown in FIG. 4, the gap size is set to three and the burst size is set to four, thereby creating a change burst 438. That is, each of the alterations are less than or equal to three time-related events from another alteration, and the number of alterations is greater than or equal to four.

With reference now to FIGS. 5-6, various example methodologies are illustrated and described. While the methodologies are described as being a series of acts that are performed in a sequence, it is to be understood that the methodologies are not limited by the order of the sequence. For instance, some acts may occur in a different order than what is described herein. In addition, an act may occur concurrently with another act. Furthermore, in some instances, not all acts may be required to implement a methodology described herein.

Moreover, the acts described herein may be computer-executable instructions that can be implemented by one or more processors and/or stored on a computer-readable medium or media. The computer-executable instructions may include a routine, a sub-routine, programs, a thread of execution, and/or the like. Still further, results of acts of the methodologies may be stored in a computer-readable medium, displayed on a display device, and/or the like.

Referring now to FIG. 5, a methodology 500 that facilitates identifying change bursts is illustrated. The methodology 500 begins at 502, and at 504 a current burst value is set to zero. For instance, in this methodology the current burst value can be a counter value that is used to track a number of alterations that occur within a threshold gap size from another alteration with respect to a portion of code of interest.

At 506, an i+1th alteration to a portion of code of interest is accessed. For instance, if an initial pass is undertaken with respect to the portion of code of interest, a second alteration to the portion of the code can be accessed.

At 508, a time event corresponding to the ith alteration is subtracted from the time event corresponding to the i+1th alteration. The subtraction undertaken at 508 provides an amount of gap (e.g., a number of time-related events) between the ith alteration and the i+1th alteration to the portion of the code.

At 510, a determination is made regarding whether the difference between the ith alteration and the i+1th alteration is less than or equal to a threshold gap size. If the difference in time-related events is less than or equal to the gap size, then the ith alteration and the i+1th alteration may be grouped together as a burst.

At 512, a determination is made regarding whether the current burst value is equal to zero (e.g., whether the ith alteration and the i+1th alteration are the first two alterations in the burst). If the current burst value is determined to be equal to zero at 512, then at 514 the current burst value is set to be equal to two. Thereafter, at 516, i is incremented, and the methodology returns to act 506.

If at 512 a determination is made that the current burst value is not equal to zero, then at 518 the current burst value is incremented. Thereafter, the methodology 500 proceeds to act 516 where i is incremented, and thereafter continues to act 506 where the i+1th alteration to the portion of the code is accessed.

If it is determined at 510 that the difference in time-related events between the ith alteration and the i+1th alteration is greater than the threshold gap size (not less than or equal to the threshold gap size), then the methodology proceeds to act 520, where the current burst value is analyzed. Specifically, a determination is made regarding whether the current burst value is greater than or equal to a threshold value for the burst size (f). The threshold value for the burst size can be set by an engineer, for instance, based upon experience of such engineer. Moreover, if desired, the threshold value for the burst size can be set to zero.

If it is determined at 520 that the current burst value is greater than or equal to the threshold value, then at 522 a change burst can be identified. Further, while not shown, at 522 metrics pertaining to the change burst can be generated and stored in a computer-readable medium or media and/or displayed on a display screen of a computing device.

If at 520 the determination is made that the current burst value is less than the threshold, or after a change burst has been identified at act 522, the methodology proceeds to 524 where a determination is made regarding whether there are additional alterations to the portion of the code of interest at later time-related events. If there are additional alterations to the portion of the code of interest, the methodology 500 proceeds to 526 where the current burst value is reset to zero. The methodology then continues to act 516 where i is incremented, and proceeds to act 506. If it is determined at 524 that there are no additional alterations to the portion of the code of interest, then the methodology 500 completes at 528. As described above, once a change burst is located, metrics pertaining to the change burst can be utilized in connection with predicting issues with the portion of the source code that is associated with the change burst.

With reference now to FIG. 6, a methodology 600 that facilitates predicting a defect in a portion of code is illustrated. The methodology 600 starts at 602, and at 604 information is received pertaining to alterations to code of an application over a plurality of time-related events. For instance, the information can be received from a version store that comprised multiple versions of the code. In another example, the information may be received in the form of a plurality of events pertaining to the code. As noted above, the application may be an operating system, a word processing application, a spreadsheet application, or other suitable computing application.

At 606, a determination is made that a change burst has occurred with respect to the portion of the code of the application. As described above, a change burst relates to a number of alterations of the portion of the code over a plurality of time-related events. For instance, determining that a change burst has occurred with a respect to the portion of the code of the application can include determining that at least two alterations to the portion of the code have occurred within a threshold number of time-related events with respect to one another. Furthermore, determining that a change burst has occurred with respect to the portion of the code of the application can include determining that a threshold number of alterations exist, wherein each of the alterations is within a particular time gap of at least one other alteration. Still further, metrics can be ascertained once the determination that the change burst has occurred has been accomplished. For instance, such metrics can be a number of alterations that occur in the change burst, a number of change bursts that occur with respect to the portion of the code over a threshold number of time-related events, a number of alterations that occur with respect to the portion of the code over a threshold number of time-related events, a number of alterations that occur in consecutive time-related events, etc.

At 608, a prediction is made that a portion of the code will be defective based at least in part upon the determination that the change burst has occurred. Furthermore, the prediction can be made based at least in part on one or more metrics that correspond to the portion of the code and/or the change burst. Additionally or alternatively, maintenance predictions can be made based at least in part upon the determination that a change burst has occurred with respect to the portion of the code, wherein maintenance predictions can indicate which portions of code will most likely require maintenance once the application is released. Still further, a recommendation can be output based at least in part upon the determination that the change burst exists with respect to the portion of the code.

At 610, graphical data is caused to be displayed on a display screen of a computing device, wherein the graphical data indicates that the portion of the code is predicted to be defective. The methodology 600 completes at 612.

Now referring to FIG. 7, a high-level illustration of an example computing device 700 that can be used in accordance with the systems and methodologies disclosed herein is illustrated. For instance, the computing device 700 may be used in a system that supports identifying change bursts. In another example, at least a portion of the computing device 700 may be used in a system that supports predicting defects in code of an application, predicting maintenance issues in the code of the application, recommending actions to be undertaken with respect to code of an application, etc. The computing device 700 includes at least one processor 702 that executes instructions that are stored in a memory 704. The instructions may be, for instance, instructions for implementing functionality described as being carried out by one or more components discussed above or instructions for implementing one or more of the methods described above. The processor 702 may access the memory 704 by way of a system bus 706. In addition to storing executable instructions, the memory 704 may also store versions of code, a threshold gap size, a threshold burst size, etc.

The computing device 700 additionally includes a data store 708 that is accessible by the processor 702 by way of the system bus 706. The data store 708 may include executable instructions, versions of code, identifications of change bursts in code, gap sizes, burst sizes, recommendations or predictions, etc. The computing device 700 also includes an input interface 710 that allows external devices to communicate with the computing device 700. For instance, the input interface 710 may be used to receive instructions from an external computer device, from an individual, etc. The computing device 700 also includes an output interface 712 that interfaces the computing device 700 with one or more external devices. For example, the computing device 700 may display text, images, etc. by way of the output interface 712.

Additionally, while illustrated as a single system, it is to be understood that the computing device 700 may be a distributed system. Thus, for instance, several devices may be in communication by way of a network connection and may collectively perform tasks described as being performed by the computing device 700.

As used herein, the terms “component” and “system” are intended to encompass hardware, software, or a combination of hardware and software. Thus, for example, a system or component may be a process, a process executing on a processor, or a processor. Additionally, a component or system may be localized on a single device or distributed across several devices.

It is noted that several examples have been provided for purposes of explanation. These examples are not to be construed as limiting the hereto-appended claims. Additionally, it may be recognized that the examples provided herein may be permutated while still falling under the scope of the claims. 

1. A method that facilitates predicting defects in an application that is configured to execute on a computing device, the method comprising: receiving information pertaining to alterations to a portion of code of an application over a plurality of time-related events; analyzing the portion of the code to determine that a change burst has occurred with respect to the portion of the code of the application, wherein the change burst relates to a number of alterations of the portion of the code over the time-related events; predicting that the portion of the code will be defective based at least in part upon the determination that the change burst has occurred with respect to the portion of the code of the application; and causing graphical data to be displayed on a display screen of the computing device that indicates that the portion of the code is predicted to be defective.
 2. The method of claim 1, wherein analyzing the portion of the code to determine that a change burst has occurred with respect to the portion of the code of the application comprises: determining that at least two alterations to the portion of the code occurred within a threshold number of time-related events.
 3. The method of claim 2, wherein analyzing the portion of the code to determine that a change burst has occurred with respect to the portion of the code of the application comprises: determining that a threshold number of alterations exist, wherein each alteration respectively occurs within the threshold number of time-related events from at least one other alteration to the portion of the code.
 4. The method of claim 1, further comprising: determining a number of alterations that occur in the change burst; and predicting that the portion of the code will be defective based at least in part upon the number of alterations that occur in the change burst.
 5. The method of claim 1, further comprising: determining a number of change bursts that occur with respect to the portion of code over a threshold number of time-related events; and predicting that the portion of the code will be defective based at least in part upon the number of change bursts that occur with respect to the portion of code over the threshold number of time-related events.
 6. The method of claim 1, further comprising: determining a number of alterations that occur with respect to the portion of the code over a threshold number of time-related events; and predicting that the portion of the code will be defective based at least in part upon the number alterations that occur with respect to the portion of the code over the threshold number of time-related events.
 7. The method of claim 1, further comprising: determining a number of alterations that occur in consecutive time-related events with respect to the portion of the code; and predicting that the portion of the code will be defective based at least in part upon the number of alterations that occur in consecutive time-related events.
 8. The method of claim 1, wherein the time-related events are one of weeks, days, or hours.
 9. The method of claim 1, wherein the time-related events are builds that occur with respect to a particular time unit.
 10. The method of claim 9, wherein the particular time unit is one of a week, a day, or an hour.
 11. The method of claim 1, further comprising: determining at least one of: a number of developers that made alterations to the portion of the code over a threshold number of time-related events; a number of developers that made alterations to the portion of the code over consecutive time-related events; a number of developers that made alterations to the portion of the code in the change burst; a number of lines of code in the portion of the code that were altered over the threshold number of time-related events; a number of lines of code in the portion of the code that were altered in the change burst; a number of lines of code in the portion of the code that were altered in consecutive time-related events; and predicting that the portion of the code will be defective based at least in part upon the number of alterations that occur in consecutive time-related events.
 12. The method of claim 1 configured for execution in an integrated development environment application.
 13. The method of claim 1, wherein the portion of the code is one of a binary, a file, a package, or a class.
 14. A system that facilitates predicting defects in a portion of code of an application that is configured to execute on a computing device, the system comprising the following computer-executable components: a receiver component that receives data pertaining to a plurality of versions of the portion of the code, wherein each of the plurality of versions, respectively, corresponds to a different time-related event; a determiner component that makes a determination that a change burst exists with respect to the portion of the code, wherein the change burst is a modification of the portion of the code with respect to multiple time-related events; a predictor component that generates a prediction that the portion of the code has at least one defect based at least in part upon the determination that the change burst exists with respect to the portion of the code; and a display component that causes the prediction to be displayed on a display screen of the computing device.
 15. The system of claim 14, further comprising a setter component that sets a gap size, wherein the gap size is utilized by the determiner component to make the determination that the change burst exists with respect to the portion of the code, wherein the gap size is indicative of a threshold number of time-related events within which two alterations are to occur to be considered as a portion of the change burst.
 16. The system of claim 15, wherein the setter component further sets a burst size, wherein the burst size is utilized by the determiner component to make the determination that the change burst exists with respect to the portion of the code, wherein the burst size is indicative of a number of alterations that correspond to gap sizes at or below the threshold number of time-related events that are to occur to be considered as a portion of the change burst.
 17. The system of claim 14, wherein the time-related events are builds of the code during one of a week, a day, or an hour.
 18. The system of claim 14, wherein an integrated development application comprises the receiver component, the determiner component, the predictor component, and the display component.
 19. The system of claim 14, further comprising a metric determiner component that determines a plurality of metrics pertaining to the change burst, wherein the predictor component generates the prediction based at least in part upon the plurality of metrics.
 20. A computer-readable medium comprising instructions that, when executed by a processor, cause the processor to perform acts comprising: a) accessing a version store that comprises a plurality of versions of a portion of code for an application that is configured to execute on a computing device, wherein each of the versions corresponds to a respective alteration of the portion of the code; b) subtracting a time-related event corresponding to version i of the portion of the code from a time-related event corresponding to version i+1 of the portion of the code to generate a gap value; c) comparing the gap value with a threshold gap size; if the gap value is less than or equal to the threshold gap size: d) incrementing a burst value; e) incrementing i; and f) repeating acts b) and c); if the gap value is greater than the threshold gap size: g) comparing the burst value with a threshold burst size; if the burst value is greater than or equal to the threshold burst size: h) causing identification data to be stored in a computer-readable medium that indicates that a change burst exists with respect to the portion of the code; i) incrementing i; and j) repeating acts b) and c); if the burst value is less than the threshold burst size: k) incrementing i; and l) repeating acts b) and c). 